package com.class05._super;

// 父类定义
public class ParentClass {
    private String parentAttribute;

    public ParentClass() {
        System.out.println("ParentClass default constructor called");
    }

    public ParentClass(String parentAttribute) {
        this.parentAttribute = parentAttribute;
        System.out.println("ParentClass parameterized constructor called with: " + parentAttribute);
    }
}

// 子类继承父类
class ChildClass extends ParentClass {
    private String childAttribute;

    // ① 调用父类带参数的构造器
    public ChildClass(String parentAttribute, String childAttribute) {
        super(parentAttribute);
        this.childAttribute = childAttribute;
        System.out.println("ChildClass parameterized constructor called with: " + childAttribute);
    }

    // ③ 使用 "this(形参列表)" 调用本类重载构造器
    public ChildClass(String childAttribute) {
        this("DefaultParentValue", childAttribute);
        System.out.println("ChildClass single-parameter constructor called with: " + childAttribute);
    }

    // ④ 默认调用父类无参构造器（未显式调用 "super()" 或 "this()"）
    public ChildClass() {
        this.childAttribute = "DefaultChildValue";
        System.out.println("ChildClass default constructor called");
    }

    // ⑥ 假设存在另一个构造器，由于已有两个构造器使用 "this(形参列表)"，
    // 此处若要继续调用其他构造器，则必须使用 "super(形参列表)"。
    // 但由于已无更多构造器可调用，
    // 此处仅为演示目的，实际编写时应避免重复或冗余构造器。
//     public ChildClass(String anotherParam) {
//         super("AnotherParentValue");
//         this.childAttribute = "AnotherChildValue";
//         System.out.println("ChildClass another constructor called with: " + anotherParam);
//     }
}